Image filtering is a common process used for improving the quality of a rendered image. Typically, image filters are processed in order to enhance an image's native data for purposes of improving the quality of that image's data when it is rendered on a display device or rendered on print media. Filters may be used for a variety of purposes. For example, some filters remove objectionable artifacts introduced into an image by the process of image compression and decompression.
Image data is actually natively represented as a series of rectangles having pixel data which represents values for light, color, texture, etc. organized into a rectangle which represents the entire image. Many image processing operations artificially subdivide the image into multiple smaller blocks for processing purposes. For example, common image compression algorithms subdivide the image into blocks of pixel data of width and height equal to sixteen pixels. The boundaries between these blocks of pixel data are commonly referred to as edges. The image itself usually depicts scenes or objects which transition within the image to other scenes or objects. A crisp image provides good delineation between different scenes or objects within the image, and often this crisp delineation is achieved through filter processing. A crisp image also does not include visible edges or other objects which were not in the original scene, artifacts which can result from image compression and decompression. Removal of these artifacts is achieved through edge filter processing. If no filter processing takes place for an image, then a viewer may actually see a series of edges appearing within the image in a grid format, corresponding to edges of the blocks used in image compression. Accordingly, filter processing has become a necessity when rendering images reconstituted from compressed images.
One problem with image filter processing is that manipulating and enhancing an image's native data is a processor and memory intensive task. That is, an image is typically represented as pixel data and that pixel data is voluminous. Moreover, determining what modification to make to any particular pixel value may not be completely resolved until values for surrounding pixels are known. Thus, pixel modifications (achieved through filter processing) are often dependent upon surrounding pixels.
Additionally, filters may have to process data rapidly, such as when a video, which is comprised of a series of frames (still images), is dynamically rendered to a display device. In these situations, the filters have to be as efficient as possible so that a viewer of the video does not notice any delay between frames being rendered in the video.
One known technique for improving efficiency is to use Single Instruction Multiple Data (SIMD) operations, producing multiple results for each instruction processed. However, more recent filter definitions may not be well-suited for SIMD techniques due to data-dependent processing (for which each data value may require different operations), because SIMD operations require processing multiple data samples with the same instruction. Additionally, filter definitions may not match SIMD data lengths. For example, a filter defined in terms of four samples, possibly requiring different operations for each set of four values, does not match up well with a SIMD capability of eight data values at once.
Therefore, there is a need for improved image filter processing.